package com.cfp4cloud.cfp.knowledge.support.feign;

import com.cfp4cloud.cfp.common.core.constant.ServiceNameConstants;
import com.cfp4cloud.cfp.common.core.util.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;

/**
 * 远程数据库表信息服务
 * <p>
 * 通过Feign调用代码生成服务，获取数据源、表结构等元数据信息， 主要用于支持自然语言转SQL等功能
 *
 * @author chenda
 * @date 2024/4/15
 */
@FeignClient(contextId = "remoteTableInfoService", value = ServiceNameConstants.CODEGEN_SERVICE)
public interface RemoteTableInfoService {

	/**
	 * 查询全部的数据源名称
	 * @return 数据源列表
	 */
	@GetMapping("/dsconf/list")
	R<List<Map<String, Object>>> listDs();

	/**
	 * 查询指定数据源下的全部表
	 * @param dsName 数据源名称
	 * @return 表信息列表
	 */
	@GetMapping("/table/list/{dsName}")
	R<List<Map<String, Object>>> listTable(@PathVariable String dsName);

	/**
	 * 查询表的DDL语句
	 * @param dsName 数据源名称
	 * @param tableName 表名
	 * @return 表的DDL语句
	 */
	@GetMapping("/table/ddl/{dsName}/{tableName}")
	R<String> listDDL(@PathVariable("dsName") String dsName, @PathVariable("tableName") String tableName);

	/**
	 * 查询表的列信息
	 * @param dsName 数据源名称
	 * @param tableName 表名
	 * @return 列信息列表
	 */
	@GetMapping("/table/column/{dsName}/{tableName}")
	R<List<Map<String, Object>>> listColumn(@PathVariable("dsName") String dsName,
			@PathVariable("tableName") String tableName);

	/**
	 * 执行SQL语句
	 * @param dsName 数据源名称
	 * @param sql 要执行的SQL语句
	 * @return 执行结果
	 */
	@GetMapping("/ext/execSQL")
	R execSQL(@RequestParam String dsName, @RequestParam String sql);

}
